
什么是字符串
	由于字符组成的串型数据结构，以'\0'作为结束标志。
	字符串为什么重要：
		我们看到的都是字符型数据，而计算机只能针对数值型数据进行运算，因此我们需要非常频繁的把数据转换成字符串，字符串转换成数据。
	
	字符串存在的形式：
	1.字符数组：
		char arr[5] = {'h','e','l','l','o'}; // error
		char arr[6] = {'h','e','l','l','o'};
		一般存储在栈，也可以存储在堆。
		注意：为'\0'预留位置！！！
		
	2.字符串字面值："由双绰号包括的若干个字符"  	char* str1 ="hehe";	printf("%s\n",str1); 
		1、以地址存在，const char* str。必须使用指针指向
		2、它存储在只读段｜代码段，不能修改，否则会产生段错误。
		3、自带'\0';
	一般情况都使用字符串字面值来初始化字符数组，编译器会把只读段中的字符串拷贝一份到栈，并且包括'\0'。
	char str[]="hehe";


字符串的输出：
	printf 	%s 	字符串首地址
	puts 		字符串首地址，不需要占位符，自动换行。
	putchar 	显示一个字符
	fprintf(stdout,"%s","hehe");

字符串的输入：
	scanf %s 	不能输入带空格的字符串
	gets 		不检查字符串的长度，可能会造成段错误
	fgets 		可以指定接收的字符串长度，实际只能接收size-1 字符，它会为'\0'预留一个位置，
				当输入的字符数不足size-1 时会边回车符一起接收。可能输入缓冲区会残留数据。
				
		

	练习：实现一个get_str，可以接收指定长度的字符串，但不包括'\n',不要残留多余的数据在输入缓冲区中。

字符串的操作：
	C语言中没有处理字符串的语句，只能使用标准库中所提供的函数进行操作。
	string.h

	strlen 计算字符串的长度，不包括'\0'
	strcpy 字符串拷贝，使用字符串字面值给字符数组赋值只能在定义时使用，之后的赋值必须使用strcpy函数。
	strcat 在str1后追加str2，连接
	strcmp 按照字典序比较两个字符串，
		str1 > str2 结果为1
		str1 < str2 结果为-1
		str1 = str2 结果为0
	atoi/atol/atoll 字符串转换为整数
	strstr 返回str2在str1中首次出现的位置，如果返回空表示不存在。
	
	memset/memcpy(内存拷贝)/strchr
	sprintf/sscanf(用于拼接/解析字符串)
	
	
	
	
	
	
	
	
	
	要求：能够实现出以上函数。
	
	
	作业1：实现一个函数字符串逆序。
	作业2：实现一个函数判断字符串是否回文。   12345  54321
	作业3：把一个英文文章的单词进行逆序显示。
		AliOS Things released by Alibaba is an open-source implementation of
		of implementation open-source an is Alibaba by released Things AliOS
	作业4：实现大数相加。
	作业5：实现find_sub_string(str1,str2)函数，判断字符串str2在str1中出现的次数。返回str2在str1中出现的次数。
	int find_sub_string(const char* str1, const char* str2);
	作业6：实现一个函数，把字符串的首字母转成大写，空格替换成"% %"。
     a  b  c  das     9
	 a% %b% %c% %das   2*3+9=15
